Autor |
Beitrag |
Gausi
Beiträge: 8535
Erhaltene Danke: 473
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: Di 10.01.06 11:51
Ich bin gerade dabei, in eines meiner Programme einen mp3-Player mit Hilfe der bass.dll einzubauen. Das klappt soweit auch hervorragend (hätte ich gewusst, dass das so einfach ist, hätte ich das schon viel früher gemacht). Ein Problem habe ich aber noch. Wenn ich auf meiner Multimediatastatur (von Logitech) die Taste "Play" drücke, passiert nix. Und "Next" hat auch keine Wirkung. Warum klappt das nicht?
Nein, im Ernst. Bei mir haben diese Tasten zur Zeit folgende Funktion: Wenn ich Play drücke, startet Winamp, sofern kein anderer Mediaplayer geöffnet ist. Mit Next/Prev etc. kann ich dann Winamp steuern. Ist ein anderer Player geöffnet (z.B. der WindowsMediaPlayer) wird dieser gesteuert. Ich möchte nun, dass diese Tasten mein Programm steuern, wenn es geöffnet ist.
Die Frage ist nun: Wie funktioniert das? Das OnKeyPress/OnKeyDown wird nicht ausgelöst (oder kommt zumindest nicht auf meiner Form an). Damit die Tasten funktionieren, muss im Hintergrund "iTouch" laufen. Auf der Homepage gibt es eine Liste der unterstützten Player, allerdings habe ich hier einen, der nicht auf der Liste steht, aber trotzdem funktioniert. Auch dann, wenn das Fenster selbst nicht den Focus hat.
Also muss es da einen Trick geben. Weiss einer, wie diese Tasten behandelt werden? Also entweder von Windows direkt oder durch den speziellen Logitech-Treiber? Wie wird festgestellt, an welches Programm das Kommando "Nächster Titel" gesendet wird, und wie sieht dieses Kommando genau aus? Und wie ist das mit anderen Modellen/Herstellern solcher Tastaturen?
Hat einer ne Idee?
_________________ We are, we were and will not be.
|
|
Terra
Beiträge: 307
Windows 7 Ultimate
Delphi® XE3
|
Verfasst: Di 10.01.06 12:35
Also bei meinem Tastaturtreiber kann ich komplett alles selber einstellen. Soll heißen, das man dort auch einstellen kann, welche Taste - welche Aktion ausführen soll. Sollte das bei dir nicht der Fall sein, siehts meißt schlecht aus, da die Informationen, was beim Anschlag der Funktionstaste im Bios der Tastatur abgespeichert sind und dadurch auch nicht verändert werden können.
Kann sein das ich mich irre aber meines Wissens ist das so, wie ich es geschrieben habe.
Vielleicht ist es, je nach Tastaturtyp auch möglich ein eigenen Tastaturtreiber zu entwickeln. Möglich wäre evtl. auch noch den Tastaturhersteller selbst nach den erforderlichen Daten zu befragen. Ob sie die dir auch geben hängt vom Hersteller ab.
Terra
|
|
Lossy eX
Beiträge: 1048
Erhaltene Danke: 4
|
Verfasst: Di 10.01.06 14:07
Schau mal folgendes Sample auf CodeGuru. Gefunden über Google. Kenne mich damit zwar nicht wirklich gut aus aber vom Code her siehts ganz brauchbar aus.
_________________ Nur die Menschheit ist arrogant genug, um zu glauben sie sei die einzige intelligente Lebensform im All. Wo nicht mal das nachhaltig bewiesen wurde.
|
|
alias5000
Beiträge: 2145
WinXP Prof SP2, Ubuntu 9.04
C/C++(Code::Blocks, VS.NET),A51(Keil),Object Pascal(D2005PE, Turbo Delphi Explorer) C# (VS 2008 Express)
|
Verfasst: Di 10.01.06 14:16
Oder schau mal hier: www.delphi-forum.de/viewtopic.php?t=42304 ich hatte sowas auch schon mal gefragt. Die Komponente, auf die verwiesen wird, funktioniert Einwandfrei, solange deine Anwendung den Fokus hat. Soll deine Anwendendung immer drauf reagieren benötigst du ja einen Hook und den müsstest du dir ja wahrscheinlich selber schreiben (ausgehen von CodeGuru oder der Source von der Komponente)
Gruß alias5000
_________________ Programmers never die, they just GOSUB without RETURN
|
|
Gausi
Beiträge: 8535
Erhaltene Danke: 473
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: Di 10.01.06 17:32
Lossy eX hat folgendes geschrieben: | Schau mal folgendes Sample auf CodeGuru. Gefunden über Google. Kenne mich damit zwar nicht wirklich gut aus aber vom Code her siehts ganz brauchbar aus. |
Kenne mich damit auch nicht so gut aus, aber habs damit hingekriegt: So gehts:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31:
| const APPCOMMAND_MEDIA_NEXTTRACK = 720896; APPCOMMAND_MEDIA_PREVIOUSTRACK = 786432; APPCOMMAND_MEDIA_STOP = 851968; APPCOMMAND_MEDIA_PLAY_PAUSE = 917504; procedure MediaKey (Var aMSG: tMessage); message WM_APPCOMMAND; procedure TForm1.MediaKey (Var aMSG: tMessage); begin case aMSG.LParam of APPCOMMAND_MEDIA_NEXTTRACK : begin PlayNextBTNClick(NIL); aMsg.Result := 1; end; APPCOMMAND_MEDIA_PREVIOUSTRACK : begin PlayPrevBTNClick(NIL); aMsg.Result := 1; end; APPCOMMAND_MEDIA_STOP : begin StopBTNClick(NIL); aMsg.Result := 1; end; APPCOMMAND_MEDIA_PLAY_PAUSE : begin PlayBTNClick(NIL); aMsg.Result := 1; end; end; end; |
Erstaunlicherweise scheint das auch zu klappen, wenn mein Fenster nicht den Fokus hat. Obwohl ich das weitere (mit den Hooks) noch nicht gemacht habe. Es scheint so zu sein, dass dieses iTouch die Nachricht abfängt und an alle Fenster weiterleitet in der Hoffnung, dass eines damit was anfangen kann...
_________________ We are, we were and will not be.
|
|
Lossy eX
Beiträge: 1048
Erhaltene Danke: 4
|
Verfasst: Mi 11.01.06 12:34
Schau dir mal die Messages als Hexwerte an. Das sieht wesentlich angenehmer aus.
Delphi-Quelltext 1: 2: 3: 4:
| APPCOMMAND_MEDIA_NEXTTRACK = $B0000; APPCOMMAND_MEDIA_PREVIOUSTRACK = $C0000; APPCOMMAND_MEDIA_STOP = $D0000; APPCOMMAND_MEDIA_PLAY_PAUSE = $E0000; |
Deckte sich auch mit dem was google rausgeworfen hat.
_________________ Nur die Menschheit ist arrogant genug, um zu glauben sie sei die einzige intelligente Lebensform im All. Wo nicht mal das nachhaltig bewiesen wurde.
|
|
Gausi
Beiträge: 8535
Erhaltene Danke: 473
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: Mi 11.01.06 16:41
Naja, als er bei mir gemeckert hat, dass APPCOMMAND_MEDIA_NEXTTRACK unbekannt sei, hab ich mir halt über Showmessage die Konstanten ausgeben lassen. Gegoogelt hab ich danach nicht.
Etwas verwundert war ich schon über die "komischen Werte"; dass das in der Hex-Darstellung so glatte Werte sind, ist tatsächlich etwas angenehmer. Werde wohl meinen Code entsprechend anpassen. Danke nochmal!
Jetzt hab ich nur noch so ein paar Probleme mit Drag&Drop, ein paar weitere Anzeigen, die auch ins Design passen müssen (Aussehen/Platz), ein paar Funktionen wie Device-Auswahl, WMA-Unterstützung, evtl. Bufferung der Audiodaten, evtl. Fade-In/-Out bei Titelwechsel, Speichern/Laden der Playlist und ein aufpolieren einiger Verhaltensweisen des Players, die noch störend sind, und schon ist das Ding reif für die Veröffentlichung .
(Das hier hatte keine hohe Priorität. Ist aber schön, dass das so schnell und einfach gelöst werden konnte!)
_________________ We are, we were and will not be.
|
|
alias5000
Beiträge: 2145
WinXP Prof SP2, Ubuntu 9.04
C/C++(Code::Blocks, VS.NET),A51(Keil),Object Pascal(D2005PE, Turbo Delphi Explorer) C# (VS 2008 Express)
|
Verfasst: Mi 11.01.06 17:48
Wie spielst du die Dateien ab, mit dem TMediaPlayer, bass, fmod?
Gruß alias5000
_________________ Programmers never die, they just GOSUB without RETURN
|
|
F34r0fTh3D4rk
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Mi 11.01.06 17:55
wenn er bass sagt, dann wird er wohl nicht gelogen haben
|
|
alias5000
Beiträge: 2145
WinXP Prof SP2, Ubuntu 9.04
C/C++(Code::Blocks, VS.NET),A51(Keil),Object Pascal(D2005PE, Turbo Delphi Explorer) C# (VS 2008 Express)
|
Verfasst: Mi 11.01.06 18:01
hm, ok, das muss ich wohl übersehen haben
_________________ Programmers never die, they just GOSUB without RETURN
|
|
Gausi
Beiträge: 8535
Erhaltene Danke: 473
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: Mi 11.01.06 18:09
Womit ich das abspiele, ist hier ja eigentlich egal, oder? Für andere Probleme (Visualisation, spulen im Stück, Lautstärke, faden) schon eher, aber damit komme ich bisher ganz gut klar - die Beispiele und Hilfe bei der bass.dll sind ja recht ausführlich.
Oder gibt es spezielle Gründe, weswegen man nicht bass, sondern TMediaplayer oder fmod nehmen sollte?
_________________ We are, we were and will not be.
|
|
tommie-lie
Beiträge: 4373
Ubuntu 7.10 "Gutsy Gibbon"
|
Verfasst: Mi 11.01.06 19:07
Gausi hat folgendes geschrieben: | Oder gibt es spezielle Gründe, weswegen man nicht bass, sondern TMediaplayer oder fmod nehmen sollte? |
Ist hauptsächlich Geschmackssache. Mit dem Mediaplayer lässt es sich einfach arbeiten, da ein ActiveX-Control. Man muss nichts mitliefern, ist dafür aber auf die ACM-Codecs beschränkt. Bass ist vergleichweise klein, FMOD vergleichsweise professionell und portabel. Für FMOD 3.x gab es mal eine Vergleichstabelle auf der FMOD-Seite, mittlerweile scheint die verschwunden zu sein, aber FMOD war ein ziemlich schneller Decoder. Ich nehme an, daß sich das bei FMODex nicht geändert hat.
_________________ Your computer is designed to become slower and more unreliable over time, so you have to upgrade. But if you'd like some false hope, I can tell you how to defragment your disk. - Dilbert
|
|
alias5000
Beiträge: 2145
WinXP Prof SP2, Ubuntu 9.04
C/C++(Code::Blocks, VS.NET),A51(Keil),Object Pascal(D2005PE, Turbo Delphi Explorer) C# (VS 2008 Express)
|
Verfasst: Mi 11.01.06 19:50
Nein, es hatte mich bloß interessiert, weil du diese Zusatzfeatures wie fade in/out und so erwähnt hast und da hatte ich mir bloß ein wenig Gedanken über die Lösung dazu gemacht. Ich selber programmiere z.Z. auch ein wenig mit bass (wenn auch nur ab und zu).
Gruß alias5000
_________________ Programmers never die, they just GOSUB without RETURN
|
|
momo48xs
Hält's aus hier
Beiträge: 2
|
Verfasst: Fr 01.02.08 21:58
Hallo,
wenn ich den hier geposteten Programmcode für mein Programm verwende, erscheint folgender Fehler:
Bei
procedure MediaKey (Var aMSG: tMessage); message WM_APPCOMMAND;
kommt "Undefinierter Bezeichner 'WM_APPCOMMAND'".
Welche Bibliothek muss ich da noch einbinden?
Oder was ist da los?
Meine uses sieht so aus:
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs ;
|
|
Gausi
Beiträge: 8535
Erhaltene Danke: 473
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: Fr 01.02.08 22:15
_________________ We are, we were and will not be.
|
|
momo48xs
Hält's aus hier
Beiträge: 2
|
Verfasst: Sa 02.02.08 12:51
Das merkwürdige daran ist ja, dass es schon mal funktioniert hat.
Danach wurde mein Projekt durch irgendeinen Datenverlust beschädigt.
So konnte ich es mit Delphi 7 ( benutze ich standardmäßig) nicht mehr Öffnen (' Corrupt Portfolio stream')
Mit Delphi 6 öffnen geht jedoch problemlos
Da ich aber feststellen musste, dass viele Buttons etc. schlichtweg einfach nicht mehr da waren auf dem form, jedoch in der Unit weiter dekalriert waren , dachte ich, dass vielleicht in der Unit irgendetwas verloren gegangen ist, wodurch WM_APPCOMMAND nicht mehr funktioniert.
Daran kann es aber auch nicht liegen.
Ich habe zu Testzwecken ein neues kleines Programm geschrieben, bei dem der selbe Fehler auftritt.
Der Tipp scheint jedenfalls zu funktionieren.
Der Compiler beschwert sich jetzt logischerweise nicht mehr.
Ob jetzt nun tatsächlich auf WM_APPCOMMAND reagiert wird, kann ich noch nicht sagen, da ich durch den Datenverlust erstmal noch einige Objekte wiederherstellen muss.
Vielen Dank erstmal.
Edit: Tipp funktioniert einwandfrei. Danke
|
|
|